package chiffrage;
/**
 * @author RIABI mohamed 
 * @param ChiffragePanel
 * cette class permet de relier l'interface graphique avec la class qui nous offre les jeux chiffrage par Bloc 
 * @return une action pour chaque evenement
 * constructeur ControleurBloc
 */
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.bouncycastle.jce.provider.JCEMac;

import chiffrage.FileCrypter.Algo;
import chiffrage.FileCrypter.Mode;
import chiffrage.FileCrypter.Remb;

public class ContinuPanel extends JPanel {
	Border continu, resultat, cle;
	JOptionPane joinfo;
	JLabel jlalgo;
	JComboBox<Algo> jcalgo;
	JLabel jlmode;
	JComboBox<Mode> jcmode;
	JLabel jlremb;
	JComboBox<Remb> jcremb;
	JLabel jltm;
	JLabel jlfile;
	JTextField jtf;
	JTextField jttm;
	JLabel jlcle;
	JTextField jtcle;
	JButton jbparcourir;
	JButton jbok;
	FlowLayout fl;
	JSlider jsnbfois;
	JLabel jlnbfois;
	JTextField jtnbfois;
	JLabel jltaille;
	JTextField jttaille;

	public ContinuPanel() {
		continu = BorderFactory.createTitledBorder(
				BorderFactory.createMatteBorder(5, 5, 5, 5, Color.black),
				"Chiffrage Continu");
		resultat = BorderFactory.createMatteBorder(5, 5, 5, 5, Color.RED);
		cle = BorderFactory.createMatteBorder(5, 5, 5, 5, Color.lightGray);
		fl = new FlowLayout(FlowLayout.LEFT);
		fl.setHgap(5);
		fl.setVgap(5);
		this.setLayout(fl);
		joinfo = new JOptionPane();
		jcalgo = new JComboBox<Algo>();
		jcmode = new JComboBox<Mode>();
		jcremb = new JComboBox<Remb>();
		jltm = new JLabel("Temps moyen: ");
		jttm = new JTextField();
		jlalgo = new JLabel("Algorithme: ");
		jlmode = new JLabel("Mode: ");
		jlremb = new JLabel("Rembourage: ");
		jlfile = new JLabel("Fichier: ");
		jtf = new JTextField();
		jlcle = new JLabel("Cle: ");
		jtcle = new JTextField();
		jbparcourir = new JButton("Parcourir");
		jbparcourir.addActionListener(new ControleurContinue(this));
		jbok = new JButton("Chiffrer");
		jbok.addActionListener(new ControleurContinue(this));
		jcalgo.setPreferredSize(new Dimension(150, 27));
		Algo[] al = FileCrypter.Algo.values();
		for (Algo a : al) {
			jcalgo.addItem(a);
		}
		jcmode.setPreferredSize(new Dimension(150, 27));
		Mode[] mo = FileCrypter.Mode.values();
		for (Mode m : mo) {
			jcmode.addItem(m);
		}
		jcremb.setPreferredSize(new Dimension(150, 27));
		Remb[] rem = FileCrypter.Remb.values();
		for (Remb r : rem) {
			jcremb.addItem(r);
		}
	    jcalgo.setSelectedIndex(2);
		jcmode.setSelectedIndex(3);
		jcremb.setSelectedIndex(1);
		jtcle.setPreferredSize(new Dimension(150, 27));
		jtf.setPreferredSize(new Dimension(100, 27));
		jttm.setPreferredSize(new Dimension(100, 27));
		jttm.setEditable(false);
		jttm.setBorder(resultat);
		jtcle.setBorder(cle);
		jltaille = new JLabel("Taille: ");
		jttaille = new JTextField();
		jttaille.setPreferredSize(new Dimension(80, 27));
		jttaille.setEditable(false);
		jsnbfois = new JSlider();
		jsnbfois.setMaximum(100);
		jsnbfois.setMinimum(0);
		jsnbfois.setValue(1);
		jsnbfois.setPaintTicks(true);
		jsnbfois.setPaintLabels(true);
		jsnbfois.setMinorTickSpacing(20);
		jsnbfois.setMajorTickSpacing(20);
		jsnbfois.setMinimumSize(new Dimension(200, 40));
		jsnbfois.setPreferredSize(new Dimension(200, 40));
		jsnbfois.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				if (jsnbfois.getValue() == 0)
					jsnbfois.setValue(1);
				jtnbfois.setText(String.valueOf(jsnbfois.getValue()));
			}
		});
		jtnbfois = new JTextField();
		jtnbfois.setPreferredSize(new Dimension(60, 27));
		jlnbfois = new JLabel("Nombre de fois: ");
		jtnbfois.setText("1");
		jtnbfois.setEditable(false);
		jcalgo.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (jcalgo.getSelectedIndex() == 5 || jcalgo.getSelectedIndex() == 7 || jcalgo.getSelectedIndex()==8) {
					jcmode.setEnabled(false);
					jcremb.setEnabled(false);
				} else {
					jcmode.setEnabled(true);
					jcremb.setEnabled(true);
				}

			}
		});
		jcmode.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (jcmode.getSelectedIndex() > 1
						&& jcmode.getSelectedIndex() < 6) {
					if (!jcremb.getItemAt(0).equals(
							FileCrypter.Remb.NoPadding))
						jcremb.insertItemAt(FileCrypter.Remb.NoPadding,
								0);
				} else

				if (jcremb.getItemAt(0).equals(
						FileCrypter.Remb.NoPadding))
					jcremb.removeItemAt(0);

			}
		});
		this.add(jlalgo);
		this.add(jcalgo);
		this.add(jlmode);
		this.add(jcmode);
		this.add(jlremb);
		this.add(jcremb);
		this.add(jlfile);
		this.add(jtf);
		this.add(jbparcourir);
		this.add(jlnbfois);
		this.add(jsnbfois);
		this.add(jtnbfois);

		this.add(jbok);
		this.add(jltaille);
		this.add(jttaille);
		this.add(jlcle);
		this.add(jtcle);
		this.add(jltm);
		this.add(jttm);
		this.setBackground(Color.CYAN);
		this.setBorder(continu);
	}

}
